#ifndef DETECT_STRUCTURE_H
#define DETECT_STRUCTURE_H

#include <iostream>
#include <vector>
#include <cmath>
#include <complex>
#include <algorithm>
#include <memory>
#include <random>
#include <functional>

#include "Dense"
#include "fftw3.h"

using Complex = std::complex<float>;
using Pulse = std::vector<Complex>;
using PulseDopplerMatrix = std::vector<std::vector<Complex>>; // 脉冲多普勒矩阵
using Eigen::MatrixXcf;
using Eigen::VectorXcf;

// 雷达参数配置
struct RadarParameters
{
    float carrier_frequency;  // 载频 (Hz)
    float pulse_width;        // 脉冲宽度 (s)
    float pulse_rep_interval; // 脉冲重复间隔 (s)
    int num_pulses;           // 相参处理间隔内的脉冲数
    int num_samples;          // 每个脉冲的采样点数
    float sampling_rate;      // 采样率 (Hz)
    float bandwidth;          // 带宽 (Hz)
    int num_antennas;         // 天线阵元数量
    float antenna_spacing;    // 天线阵元间距 (m)
    float light_speed;        // 光速 (m/s)

    // 计算派生参数
    inline float getRangeResolution() const
    {
        return light_speed / (2.0f * bandwidth);
    }

    inline float getMaxUnambiguousRange() const
    {
        return light_speed * pulse_rep_interval / 2.0f;
    }

    inline float getMaxUnambiguousVelocity() const
    {
        return light_speed / (4.0f * carrier_frequency * pulse_rep_interval);
    }

    inline float getVelocityResolution() const
    {
        return light_speed / (2.0f * carrier_frequency * num_pulses * pulse_rep_interval);
    }
};

// 检测单元信息
struct DetectionCell
{
    int range_bin;
    int doppler_bin;
    int angle_bin;
    float power;
};

// 目标信息结构
struct TargetInfo
{
    float range;        // 距离 (m)
    float velocity;     // 速度 (m/s)
    float angle;        // 角度 (度)
    float power;        // 功率 (dB)
    float snr;          // 信噪比 (dB)
    int num_detections; // 凝聚的点迹数量

    TargetInfo(float r, float v, float a, float p, float s, int n)
        : range(r), velocity(v), angle(a), power(p), snr(s), num_detections(n) {}
};

#endif